﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace CEP
{
    /// <summary>
    /// Esta classe é responsável por gerir as notificações via e-mail
    /// </summary>
    class NotificarEmail
    {

        private static NotificarEmail instance = new NotificarEmail();
        private NotificarEmail() { }

        public static NotificarEmail Instance
        {
            get
            {
                return instance;
            }
        }

        /// <summary>
        /// Envia um e-mail para notificar o utilizador
        /// </summary>
        /// <param name="evento">O modelo do evento a ser enviado</param>
        /// <returns>True se enviado com sucesso</returns>
        public bool enviar(Evento evento)
        {
            try
            {
                //definições de conta
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com", 587);
                SmtpServer.Credentials = new NetworkCredential("extremeevents11@gmail.com", "Eventosmuitabons");
                SmtpServer.EnableSsl = true;

                Log.Instance.escrever(String.Format("Notificar | E-mail | ID Evento:{0}, ID Subscricao:{1}, De:{2}, Para:{3}", evento.id_evento, evento.id_subscrever_evento, Properties.Settings.Default.mail_origem, evento.visitante_email));

                //enviar body como HTML
                mail.IsBodyHtml = true;
                //definir mail de origem
                mail.From = new MailAddress(Properties.Settings.Default.mail_origem);
                //definir mail de destino
                mail.To.Add(evento.visitante_email);
                //definir assunto
                mail.Subject = String.Format("ExtremeEvents | {0} ({1})",evento.titulo,evento.nome_categoria);
                //definir corpo do e-mail
                mail.Body = String.Format(@"Olá {0},
                    <br>O evento '{1}' que subscreveu irá ter lugar a {2}
                    <br><br><li>Dados do evento</li>
                    <br><b>Início</b>: {2}
                    <br><b>Fim</b>: {3}
                    <br><b>Contacto telefonico</b>: {4}
                    <br><b>Email</b>: {5}
                    <br><b>Morada</b>: {6}, {7}
                    <br><b>Coordenadas</b>: {8}, {9}
                    <br><b>Descição</b>: {10}
                    <hr><br>Consulte aqui <u>previsão meteorológica</u>:
                    <link rel='stylesheet' type='text/css' media='screen' href='http://img.weather.weatherbug.com/Style/stickers/v2/Stickers_125x125.css' /> 
                    <div class='wXbody'>
                       <div class='wXguts'>
		                    <iframe id='WeatherBugSticker_125x125_v2' src='http://weather.weatherbug.com/desktop-weather/web-widgets/getSticker.html?CityCode=73420&ZCode=z5545&Size=125x125&StationID=LPPT&units=1&Version=2&lang_id=en-us' width='123' height='70' frameborder='0' scrolling='no' allowtransparency='yes'></iframe> 
		                    <div class='wXlinks'>
			                    <span class='link'><a href='http://weather.weatherbug.com/weather-forecast.html' target='_blank' onclick='Javascript:this.href='http://weather.weatherbug.com/Portugal/Lisbon-weather/local-forecast/7-day-forecast.html?zcode=z5545&units=1''>Forecast</a></span>
			                    <span class='link'><a href='http://weather.weatherbug.com/satellite-radar.html' target='_blank' onclick='Javascript:this.href='http://weather.weatherbug.com/Portugal/Lisbon-weather/satellite/infrared-satellite.html?zcode=z5545&units=1''> Satellite</a></span>
		                    </div>
		                    <div class='wXlogo'>
			                    <a href='http://weather.weatherbug.com/default.html' target='_blank' onclick='Javascript:this.href='http://weather.weatherbug.com/Portugal/Lisbon-weather.html?zcode=z5545&units=1''><img src='http://img.weather.weatherbug.com/images/stickers/v2/125x125/wxbug-logo.jpg' border='0' alt='WeatherBug'/></a>
		                    </div>
	                    </div>
                    </div>", 
                    evento.visitante_nome, 
                    evento.titulo,
                    String.Format("{0:dd/MM/yyyy}", evento.data_inicio),
                    String.Format("{0:dd/MM/yyyy}", evento.data_fim),
                    evento.contato_telefonico, 
                    evento.email, 
                    evento.morada, 
                    evento.codigo_postal, 
                    evento.latitude, 
                    evento.longitude, 
                    evento.descricao);
                
                //enviar e-mail
                SmtpServer.Send(mail);

                return true;
            }

            catch (Exception e)
            {
                Log.Instance.escrever("Error: Ocorreu um erro a enviar o email\n" + e.Message + "\n" + e.ToString());

                return false;
            }
        }

    }
}
